/**
 * @(#)RecursosHumanosManager.java Jan 24, 2007
 *
 * Copyright (c) 2005-2010 Psiqueware S.A. de C.V. All Rights Reserved.
 * This software is the proprietary information Psiqueware S.A. de C.V.
 * Use is subject to license terms.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *
 * <br/>Usuario : Psique
 * <br/>Creaci&oacute;n: Jan 24, 2007 - 1:31:41 PM
 * <br/>
 * <br/>
 * <br/><t5>Cambios :</t5>
 * <br/><b>Fecha | Autor  |  Cambios</b>
 * <ul>
 * <li>Jan 24, 2007 | <a href = "mailto:AngelElectrico@PsiqueWare.com">Psique</a> | Creaci&oacute;n del Objeto.</li>
 * <li>Abr 19, 2007 | <a href = "mailto:AngelElectrico@PsiqueWare.com">Psique</a> | Se eliminar&oacute;n las referencias a las clases Empresa, Deportamento, etc y se cambiar&oacute;n por referencias a Estructura.</li>
 * </ul>
 */

package com.psiqueware.jazmin.empresas.recursos.humanos;

import com.psiqueware.alheli.dao.EnlaceTransaccional;
import com.psiqueware.alheli.manager.BaseManagerInterface;
import com.psiqueware.alheli.manager.ManagerException;
import com.psiqueware.alheli.seguridad.Actividad;
import com.psiqueware.alheli.seguridad.SeguridadManagerFactory;
import com.psiqueware.alheli.seguridad.UsuarioSeguridad;

import com.psiqueware.tulipan.organizacional.Estructura;

import java.util.Date;
import java.util.List;

/**
 * Encargado de establecer la informaci&oacute;n de los posibles movimientos sobre los recursos humanos
 * de una {@link Estructura}.
 * <br/>Paquete Original: com.psiqueware.tulipan.empresas
 * <br/>Nombre  Original: RecursosHumanosManager
 * <br/>Oprima para ver : <a href="RecursosHumanosManager.java.html"><i>C&oacute;digo Fuente</i> </a>
 *
 * @author <a href="mailto:AngelElectrico@PsiqueWare.com">Psique</a>
 * @version Revision: 1.1 Jan 24, 2007 1:31:41 PM
 */
public interface RecursosHumanosManager extends BaseManagerInterface
{

    /** Activiad que permite alterar las categorias que clasifican a los recursos humanos. */
    public final static Actividad s_alterarCategoriasRecursosHumanos = SeguridadManagerFactory.getActividad ( "Permite alterar las categorias que clasifican a los recursos humanos.", RecursosHumanosManager.class );

    /**
     * Crea un nuevo contrato para un {@link Empleado}.
     *
     * @param fechaIngreso        fecha de ingreso a la {@link Estructura}.
     * @param fechaBaja           fecha de baja a la {@link Estructura} si es para un {@link Contrato} temporal. Puede ser <code>null</code>.
     * @param tipoContrato        {@link TipoContrato} que se le dar&aacute; al trabajador.
     * @param tipoEmpleo          {@link TipoEmpleo} bajo el que trabajar&aacute;.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     *
     * @return nuevo Contrato con su informaci&oacute;n seteado.
     *
     * @exception com.psiqueware.alheli.manager.ManagerException
     *             en caso de no poder completar la operaci&oacute;n.
     */
    Contrato nuevoContrato ( Date fechaIngreso, Date fechaBaja, TipoContrato tipoContrato, TipoEmpleo tipoEmpleo, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;

    /**
     * Realiza la descripci&oacute;n de este {@link Estatuslaboral} asign&aacute;ndole una clave y un {@link Documento} descriptivo.
     * En caso de que este objeto ya halla sido descrito una excepci&oacute;n saltar&aacute; dado que no se puede eliminar un documento asignado.
     * <br/>
     * En caso de no poder realizar la operacion porque el {@link UsuarioSeguridad} no tiene el {@link Permiso}
     * este metodo devolvera <code>null</code>.
     *
     * @param analista            {@link UsuarioSeguridad} que realiza la operacion.
     * @param estructura             a la que pertenece este {@link EstatusLaboral}.
     * @param clave               a asignar. No puede repetirse respecto a otra clave dada de alta previamente.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     *
     * @return EstatusLaboral persistido.
     *
     * @exception com.psiqueware.alheli.manager.ManagerException
     *             en caso de no poder completar la operaci&oacute;n.
     * @noinspection CastToConcreteClass
     * @see com.psiqueware.manzanilla.informacion.documentos.DocumentosManager
     */
    EstatusLaboral registrarEstatusLaboral ( UsuarioSeguridad analista, Estructura estructura, String clave, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;

    /**
     * Devuelve un listado de los {@link EstatusLaboral} que utiliza la {@link Estructura}.
     *
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     * @param estructura             cuya informaci&oacute;n se busca. Debe encontrarse persistida.
     *
     * @return una {@link List} con esos objetos; vac&iacute;a en caso de no encontrar ninguno.
     *
     * @exception com.psiqueware.alheli.manager.ManagerException
     *             en caso de no poder terminar la operaci&oacute;n.
     */
    List<EstatusLaboral> listarEstatusLaboral ( Estructura estructura, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;

    /**
     * Realiza la descripci&oacute;n de este {@link RazonSueldo} asign&aacute;ndole una clave y un {@link Documento} descriptivo.
     * En caso de que este objeto ya halla sido descrito una excepci&oacute;n saltar&aacute; dado que no se puede eliminar un documento asignado.
     * <br/>
     * En caso de no poder realizar la operacion porque el {@link UsuarioSeguridad} no tiene el {@link Permiso}
     * este metodo devolvera <code>null</code>.
     *
     * @param analista            {@link UsuarioSeguridad} que realiza la operacion.
     * @param estructura             a la que pertenece este {@link RazonSueldo}.
     * @param clave               a asignar. No puede repetirse respecto a otra clave dada de alta previamente.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     *
     * @return RazonSueldo persitida
     *
     * @exception com.psiqueware.alheli.manager.ManagerException
     *             en caso de no poder completar la operaci&oacute;n.
     * @noinspection CastToConcreteClass
     * @see com.psiqueware.manzanilla.informacion.documentos.DocumentosManager
     */
    RazonSueldo registrarRazonSueldo ( UsuarioSeguridad analista, Estructura estructura, String clave, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;

    /**
     * Devuelve un listado de los {@link RazonSueldo} que utiliza la {@link Estructura}.
     *
     * @param estructura             cuya informaci&oacute;n se busca. Debe encontrarse persistida.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     *
     * @return una {@link List} con esos objetos; vac&iacute;a en caso de no encontrar ninguno.
     *
     * @exception com.psiqueware.alheli.manager.ManagerException
     *             en caso de no poder completar la operaci&oacute;n.
     */
    List<RazonSueldo> listarRazonSueldo ( Estructura estructura, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;

    /**
     * Realiza la descripci&oacute;n de este {@link TipoContrato} asign&aacute;ndole una clave y un {@link Documento} descriptivo.
     * En caso de que este objeto ya halla sido descrito una excepci&oacute;n saltar&aacute; dado que no se puede eliminar un documento asignado.
     * <br/>
     * En caso de no poder realizar la operacion porque el {@link UsuarioSeguridad} no tiene el {@link Permiso}
     * este metodo devolvera <code>null</code>.
     *
     * @param analista            {@link UsuarioSeguridad} que realiza la operacion.
     * @param estructura             a la que pertenece este {@link TipoContrato}.
     * @param clave               a asignar. No puede repetirse respecto a otra clave dada de alta previamente.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     *
     * @return TipoContrato persistido.
     *
     * @exception com.psiqueware.alheli.manager.ManagerException
     *             en caso de no poder completar la operaci&oacute;n.
     * @noinspection CastToConcreteClass
     * @see com.psiqueware.manzanilla.informacion.documentos.DocumentosManager
     */
    TipoContrato registrarTipoContrato ( UsuarioSeguridad analista, Estructura estructura, String clave, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;

    /**
     * Devuelve un listado de los {@link TipoContrato} que utiliza la {@link Estructura}.
     *
     * @param estructura             cuya informaci&oacute;n se busca. Debe encontrarse persistida.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     *
     * @return una {@link List} con esos objetos; vac&iacute;a en caso de no encontrar ninguno.
     *
     * @exception com.psiqueware.alheli.manager.ManagerException
     *             en caso de no poder completar la operaci&oacute;n.
     */
    List<TipoContrato> listarTipoContrato ( Estructura estructura, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;

    /**
     * Realiza la descripci&oacute;n de este {@link TipoEmpleo} asign&aacute;ndole una clave y un {@link Documento} descriptivo.
     * En caso de que este objeto ya halla sido descrito una excepci&oacute;n saltar&aacute; dado que no se puede eliminar un documento asignado.
     * <br/>
     * En caso de no poder realizar la operacion porque el {@link UsuarioSeguridad} no tiene el {@link Permiso}
     * este metodo devolvera <code>null</code>.
     *
     * @param analista            {@link UsuarioSeguridad} que realiza la operacion.
     * @param estructura             a la que pertenece este {@link TipoEmpleo}.
     * @param clave               a asignar. No puede repetirse respecto a otra clave dada de alta previamente.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     *
     * @return TipoEmpleo persistido.
     *
     * @exception com.psiqueware.alheli.manager.ManagerException
     *             en caso de no poder completar la operaci&oacute;n.
     * @noinspection CastToConcreteClass
     * @see com.psiqueware.manzanilla.informacion.documentos.DocumentosManager
     */
    TipoEmpleo registrarTipoEmpleo ( UsuarioSeguridad analista, Estructura estructura, String clave, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;

    /**
     * Devuelve un listado de los {@link TipoEmpleo} que utiliza la {@link Estructura}.
     *
     * @param estructura             cuya informaci&oacute;n se busca. Debe encontrarse persistida.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     *
     * @return una {@link List} con esos objetos; vac&iacute;a en caso de no encontrar ninguno.
     *
     * @exception com.psiqueware.alheli.manager.ManagerException
     *             en caso de no poder completar la operaci&oacute;n.
     */
    List<TipoEmpleo> listarTipoEmpleo ( Estructura estructura, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;

    /**
     * Realiza la descripci&oacute;n de este {@link CategoriaEmpleo} asign&aacute;ndole una clave y un {@link Documento} descriptivo.
     * En caso de que este objeto ya halla sido descrito una excepci&oacute;n saltar&aacute; dado que no se puede eliminar un documento asignado.
     * <br/>
     * En caso de no poder realizar la operacion porque el {@link UsuarioSeguridad} no tiene el {@link Permiso}
     * este metodo devolvera <code>null</code>.
     *
     * @param analista            {@link UsuarioSeguridad} que realiza la operacion.
     * @param estructura             a la que pertenece este {@link CategoriaEmpleo}.
     * @param clave               a asignar. No puede repetirse respecto a otra clave dada de alta previamente.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     *
     * @return CategoriaEmpleo persistido.
     *
     * @exception com.psiqueware.alheli.manager.ManagerException
     *             en caso de no poder completar la operaci&oacute;n.
     * @noinspection CastToConcreteClass
     * @see com.psiqueware.manzanilla.informacion.documentos.DocumentosManager
     */
    CategoriaEmpleo registrarCategoriaEmpleo ( UsuarioSeguridad analista, Estructura estructura, String clave, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;

    /**
     * Devuelve un listado de los {@link CategoriaEmpleo} que utiliza la {@link Estructura}.
     *
     * @param estructura             cuya informaci&oacute;n se busca. Debe encontrarse persistida.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     *
     * @return una {@link List} con esos objetos; vac&iacute;a en caso de no encontrar ninguno.
     *
     * @exception com.psiqueware.alheli.manager.ManagerException
     *             en caso de no poder completar la operaci&oacute;n.
     */
    List<CategoriaEmpleo> listarCategoriaEmpleo ( Estructura estructura, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;
}
